package org.example.leetcode;

/**
 * @version 1.0.0
 * @author: lynn
 * @description:  字符串转换整数 (atoi)
 * fixme 整数运算，在推入的时候，注意溢出问题
 * @date: 2021/7/24 21:48
 */
public class LC8 {
    public static void main(String[] args) {
        LC8 lc=new LC8();
        //System.out.println(lc.myAtoi("-91283472332"));
        System.out.println(lc.myAtoi("2147483648"));
    }

    public int myAtoi(String s) {
        if (s==null || s.length()==0) return 0;
        int i=0;
        int flag=1;
        int res=0;
        while (i<s.length()&&s.charAt(i)==' ') { //fixme 注意越界判断
            i++;
        }
        // -2^31 ---> 2^31-1
        if (i==s.length()) return 0; //fixme 判定全是空格的情况
        if (s.charAt(i)=='-') flag=-1;
        if (s.charAt(i)=='+'||s.charAt(i)=='-') i++;
        while(i<s.length() && isDigital(s.charAt(i))){
            int digit=Integer.valueOf(String.valueOf(s.charAt(i)));
            if (res>Integer.MAX_VALUE/10 || (res==Integer.MAX_VALUE/10 && digit>7))
                return flag==-1?Integer.MIN_VALUE:Integer.MAX_VALUE;
            res= res*10+ digit;
            i++;// fixme 务必记得i++
        }
        return flag==1? res:-res;
    }
    public boolean isDigital(char c){
        Boolean flag=true;
        try{
            Integer.valueOf(String.valueOf(c));
        }catch (Exception e){
           flag=false;
        }
        return flag;
    }
}
